In the field of computer and computer network design, requests for access to one or more shared resources (e.g., a communications bus controller, a system memory interface, a cache memory controller, a thread or task scheduler, or any other resource in a microprocessor or microprocessor system) typically are allocated by an arbiter, which attempts to efficiently allocate the resources between the resource requests. For example, many networks typically include a plurality of devices that are interconnected through switch fabrics or other types of communication links that must connect the devices to a shared bus with high-reliability, high-speed, and low-latency. Many different arbitration methods have been used to allocate resources, including first-come, first-served arbitration methods, fixed priority methods that assign static priorities to different requests and arbitrates between the requests in order of priority, and round-robin arbitration methods that assign resources to each requester in equal portions and in order.
What are needed are improved apparatus and methods for arbitrating access to shared resources in computing and networking systems.